import java.util.Arrays;

class Solution {
    // public int maxTurbulenceSize(int[] arr) {
    //     int n = arr.length;
    //     if (n == 1) {
    //         return 1;
    //     }

    //     // 创建dp表、初始化、填表、返回值
    //     int[] f = new int[n];
    //     int[] g = new int[n];

    //     f[0] = g[0] = 1;

    //     for (int i = 1; i < n; i++) {
    //         if (arr[i] < arr[i-1]) {
    //             // 处于下降状态
    //             g[i] = f[i-1] + 1;
    //             f[i] = 1;
    //         } else if (arr[i] > arr[i-1]) {
    //             // 处于上升状态
    //             f[i] = g[i-1] + 1;
    //             g[i] = 1;
    //         } else {
    //             // 处于平稳状态
    //             f[i] = g[i] = 1;
    //         }
    //     }

    //     int ret = 1; // 数组的最小值为1，因此初始化为1即可
    //     for (int i = 0; i < n; i++) {
    //         // 下降状态和上升状态都可以满足最终结果，只要最长即可
    //         ret = Math.max(f[i], ret);
    //         ret = Math.max(g[i], ret);
    //     }

    //     return ret;
    // }


    public int maxTurbulenceSize(int[] arr) {
        int n = arr.length;
        if (n == 1) {
            return 1;
        }

        // 创建dp表、初始化、填表、返回值
        int[] f = new int[n];
        int[] g = new int[n];

        // 将数组全部初始化为1
        Arrays.fill(f, 1);
        Arrays.fill(g, 1);

        for (int i = 1; i < n; i++) {
            if (arr[i] < arr[i-1]) {
                // 处于下降状态
                g[i] = f[i-1] + 1;
            } else if (arr[i] > arr[i-1]) {
                // 处于上升状态
                f[i] = g[i-1] + 1;
            }
        }

        int ret = 1; // 数组的最小值为1，因此初始化为1即可
        for (int i = 0; i < n; i++) {
            // 下降状态和上升状态都可以满足最终结果，只要最长即可
            ret = Math.max(f[i], ret);
            ret = Math.max(g[i], ret);
        }

        return ret;
    }
}